Міністерство освіти і науки України
Національний університет
“Львівська політехніка”
Кафедра “Системи автоматизованого проектування”
ЗВІТ
до лабораторної роботи №4
з дисципліни «Комп’ютерна лінгвістика»
на тему:
ВИВЧЕННЯ БІБЛІОТЕКИ ПРИКЛАДНИХ ПРОГРАМ NLTK, ДЛЯ ОПРАЦЮВАННЯ ТЕКСТІВ ПРИРОДНОЮ МОВОЮ.
ОБРОБКА ОКРЕМИХ СЛІВ (підрахунок слів та лексична база даних англійської мови).
Виконала:
студентка групи ПРЛс-1
ЛЬВІВ-2008
МЕТА РОБОТИ
Вивчення основ програмування на мові Python.
Ознайомлення із способами підрахунку слів.
Ознайомлення з лексичною базою даних англійської мови WordNet.
КОРОТКІ ТЕОРЕТИЧНІ ВІДОМОСТІ
Оскільки, при роботі з текстом часто потрібно здійснювати подібні обчислення то в NLTK реалізовано окремий клас FreqDist().
Розподіл (місця в тексті де вони зустрічаються) tokens слів змінюється по тексту. Можна візуалізувати такий розподіл.
Можна використати частотний розподіл для визначення довжин слів у корпусі. Для кожного слова визначаємо його довжину і збільшуємо лічильник, який відповідає словам з даною довжиною.
Частотні розподіли дозволяють проводити підрахунок кількості вживання кожного слова в тексті. Узагальнимо цю ідею, щоб проаналізувати розповсюдження слів в певному контексті. Умовний частотний розподіл це набір частотних розподілів, кожен один для іншої умови. За умову приймемо попереднє слово. У наступні програмі визначена функція train_model(), яка використовує ConditionalFreqDist() щоб перерахувати слова, в залежності від контексту, визначеного попереднім словом (запам'ятовується в prev). Ця функція переглядає корпус, збільшуючи відповідний лічильник, і оновлюючи значення, яке відповідає попередньому слову.
Функція generate_model() містить простий цикля, який генерує текст: встановлюємо початковий контекст і програма вибирає слово, яке найчастіше зустрічається в цьому контексті. Це слово буде наступним після поточного слова (використовується метод max()), і яке потім використовується, як новий контекст. Цей простий підхід до генерації тексту швидко приводить до зациклювання, потрібен інший метод для вибору наступного слова серед доступних слів.
Колокації це пари слів, які зустрічаються частіше ніж окремі слова в тексті. Можна знайти колокації підрахувавши, як часто пари слів зустрічаються в тексті порівняно з загальною кількістю вживань цих слів у тексті. Наступна програма здійснює такі підрахунки (стор.8).
WordNet, це семантично орієнтований словник англійської мови, подібний до традиційних тезаурусів але з більш багатою структурою. У WordNet слова групуються у набори синонімів – синсети, кожен із своїм визначенням і зв’язками з іншими синсетами. WordNet 3.0 розповсюджується разом з NLTK і містить 145000 синсетів. Хоча WordNet розроблявся для психолінгвістики - цей словник широко використовується в NLP та в задачах інформаційного пошуку.
Семантична подібність двох понять пов’язана з довжиною шляху між цими поняттями в WordNet . Пакет wordnet містить багато засобів для здійснення таких вимірювань (Leacock-Chodorow, Wu-Palmer, Resnik, Jiang-Conrath, Lin ). Наприклад path_similarity (присвоює значення від 0 до 1) базується на найкоротшому шляху, який поєднує поняття за ієрархією гіперонімів (-1 означає що шлях (спільний гіперонім) не знайдено).
ТЕКСТИ ПРОГРАМ НА МОВІ Python
Модифікувати функцію generate_model() використовуючи random.choose() метод для випадкового вибору наступного слова з набору доступних слів.
>>> import nltk
>>> from nltk import corpus
>>> import random
>>> def train_model(text):
cfdist = nltk.ConditionalFreqDist()
prev = None
for word in text:
cfdist[prev].inc(word)
prev = word
return cfdist
>>> def generate_model(cfdist, word, num=20):
for i in range(num):
print word,
word = random.choice(list(cfdist[word]))
>>> model = train_model(nltk.corpus.genesis.words('english-kjv.txt'))
>>> generate_model(model, 'die')
die before they and came and followed the excellency of Ur of Aholibamah , Cast out this pit : wherefore
7. .М...